//
//  HomeTableViewController.swift
//  SinaWeibo
//
//  Created by Tony-ztb on 15/12/18.
//  Copyright © 2015年 Tony-ztb. All rights reserved.
//

import UIKit
import AFNetworking
import SVProgressHUD

private let HomeCellId = "HomeCellId"

class HomeTableViewController: BaseTableViewController {

    
    private lazy var statuses = [Status]()
    
        
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if !userLogin {
            visitorLoginView?.setupInfo("关注一些人，回这里看看有什么惊喜", imageName: nil)
            return
        }
        // 设置tableView
        prepareTableView()
        
        // 网络请求加载数据
//        loadData()
    }
    
    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        loadData()
    }
    
    private func prepareTableView() {
        // 注册cell
        tableView.registerClass(StatusCell.self, forCellReuseIdentifier: HomeCellId)
        // 预估行高
        tableView.estimatedRowHeight = 300
        // 设置自动计算行高
        tableView.rowHeight = UITableViewAutomaticDimension
        // 设置分割线的样式
        tableView.separatorStyle = .None
        
        
        // 设置系统的下拉刷新
//        refreshControl = UIRefreshControl()
        
//        refreshControl?.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        // 添加自定义下拉刷新控件
        tableView.addSubview(refreshView)
        refreshView.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        
        // 设置tableView的footerView
        tableView.tableFooterView = indicatorView
    }
    
    // 加载数据
    @objc private func loadData() {
        
        var since_id: Int64 = 0
        var max_id: Int64 = 0
        
        // 使用ViewModel获取网络数据
        if indicatorView.isAnimating() {
            max_id = statuses.last?.id ?? 0
        } else {
            
            since_id = statuses.first?.id ?? 0
        }
        
        StatusListViewModel.loadHomePageData(since_id, max_id: max_id) { (statuses) -> () in
            // 数据加载完毕 结束菊花转动动画
//            self.refreshControl?.endRefreshing()
            self.refreshView.endRefreshing()
            
            // 如果为nil
            guard let list = statuses else {
                return
            }
            
            //测试打印
//            print("----------------")
//            print(list.count)

            // 不为nil
            // 给全局属性赋值
            if since_id > 0 {   // 下拉刷新
                self.statuses = list + self.statuses
            } else if max_id > 0 {  // 上拉刷新
                self.statuses += list
                // 加载数据完成后, 让小菊花动画停止
                // 如果不停止动画, 只会加载出来一条数据
                self.indicatorView.stopAnimating()
            } else {    // 首次加载
                
                self.statuses = list
            }
            
            // 执行刷新
            self.tableView.reloadData()
        }
    }
    
    // 小菊花
    private lazy var indicatorView: UIActivityIndicatorView = {
        let indicator = UIActivityIndicatorView(activityIndicatorStyle: .Gray)
        // 开始动画
//        indicator.startAnimating()
        
        return indicator
    }()
}


// MARK: tableView 数据源的协议方法
extension HomeTableViewController {
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statuses.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(HomeCellId, forIndexPath: indexPath) as! StatusCell
        // 传递数据
        cell.status = statuses[indexPath.row]
        // 测试
//        cell.textLabel?.text = statuses[indexPath.row].text
//        print(statuses[indexPath.row].imageURLs!.count)
        
        // 如果小菊花不是处于转动状态 且 cell滑动到最后一行的时候 , 再执行
        if !indicatorView.isAnimating() && indexPath.row == statuses.count - 1 {
            // 在加载数据前转动小菊花
            // 如果放在加载数据后面执行, 则无法加载数据
            indicatorView.startAnimating()
            // 加载数据
            loadData()
        }
        return cell
    }
    
}
